package com.cscp.javastudy.juc.volatiledemo;


import java.util.concurrent.TimeUnit;

/**
 * 总结：volatile保证了可见性
 * 如果没有volatile，主线程修改num=1后对于线程1是不可见的，线程1一直认为num=0所以一直陷入死循环中
 * 如果有volatile, 主线程修改num=1后对于线程1是可见的，变为1后线程1就紧跟着停止了while循环
 */
public class VolatileDemo {

    private volatile static int num = 0;

    public static void main(String[] args) {

        new Thread(()->{//线程1
            while (num == 0){

            }
        }).start();

        try {
            TimeUnit.SECONDS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        num = 1;//主线程修改值为1
        System.out.println(num);
    }
}
